package com.leetcode;

import java.util.Scanner;
import java.util.regex.Pattern;

/**
 * @description: 密码要求:
 * 1.长度超过8位
 * 2.包括大小写字母.数字.其它符号,以上四种至少三种
 * 3.不能有长度大于2的包含公共元素的子串重复 （注：其他符号不含空格或换行）
 * @author: lei
 * @date: 2024/3/10 22:13
 * @param:
 * @return:
 **/
public class 密码验证合格程序 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String a = in.next();
            if (a.length() <= 8) {
                System.out.println("NG");
                continue;
            }
            int count = matchType(a);
            if (count < 3) {
                System.out.println("NG");
                continue;
            }
            if (checkType(a, 0, 3)) {
                System.out.println("NG");
                continue;
            }
            System.out.println("OK");
        }
    }

    /**
     * @description: 不能有长度大于2的包含公共元素的子串重复 （注：其他符号不含空格或换行）
     * @author: lei
     * @date: 2024/3/10 22:36
     * @param: [a]
     * @return: boolean
     **/
    private static boolean checkType(String a, int start, int end) {
        if (end == a.length()) return false;
        if (a.substring(end).contains(a.substring(start, end))) {
            return true;
        } else {
            return checkType(a, start + 1, end + 1);
        }
    }

    private static int matchType(String a) {
        int count = 0;
        Pattern big = Pattern.compile("[A-Z]");
        Pattern small = Pattern.compile("[a-z]");
        Pattern number = Pattern.compile("[0-9]");
        Pattern other = Pattern.compile("[^A-Za-z0-9]");
        if (big.matcher(a).find()) {
            count++;
        }
        if (small.matcher(a).find()) {
            count++;
        }
        if (number.matcher(a).find()) {
            count++;
        }
        if (other.matcher(a).find()) {
            count++;
        }
        return count;
    }
}
